#pragma once

#include "fxcc/core/graph/common/MeshJack.h"
#include "fxcc/core/graph/common/Texture2DJack.h"
#include "fxcc/core/graph/common/Texture3DJack.h"
#include "fxcc/core/graph/common/TextureCubeJack.h"
#include "fxcc/core/graph/common/Texture2DArrayJack.h"
#include "fxcc/core/graph/common/TextureCubeArrayJack.h"
#include "fxcc/core/graph/common/RenderTargetJack.h"

#include "fxcc/core/graph/common/sdf/SDFGeoData.h"

namespace fxcc
{
	namespace graph
	{
		namespace common
		{
			struct FXCC_API  GraphImpl
			{
				static std::shared_ptr<fxcc::graph::common::MeshJack> CreateMSDFMesh(const fxcc::graph::common::MSDFGeoData& geo);

				static std::shared_ptr<fxcc::graph::common::MeshJack> CreateSDFMesh(const fxcc::graph::common::SDFGeoData& geo);

				static std::shared_ptr<fxcc::graph::common::MeshJack> CreateFixedMesh(const fxcc::graph::common::GeometryData& geo);

				static std::shared_ptr<fxcc::graph::common::MeshJack> CreateSkinnedMesh(const fxcc::graph::common::GeometryData& geo, const fxcc::graph::common::SkinnedMeshData& skinnedMeshData);

				static std::shared_ptr <fxcc::graph::common::Texture2DJack> CreateTexture2D(const fxcc::graph::common::Texture2DJack::Desc& desc);

				static std::shared_ptr <fxcc::graph::common::Texture3DJack> CreateTexture3D(const fxcc::graph::common::Texture3DJack::Desc& desc);

				static std::shared_ptr <fxcc::graph::common::TextureCubeJack> CreateTextureCube(const fxcc::graph::common::TextureCubeJack::Desc& desc);

				static std::shared_ptr <fxcc::graph::common::TextureCubeArrayJack> CreateTextureCubeArray(const fxcc::graph::common::TextureCubeArrayJack::Desc& desc);

				static std::shared_ptr <fxcc::graph::common::Texture2DArrayJack> CreateTexture2DArray(const fxcc::graph::common::Texture2DArrayJack::Desc& desc);

				static std::shared_ptr <fxcc::graph::common::RenderTargetJack> CreateRT(const fxcc::graph::common::RenderTargetJack::Desc& desc);

			};
		}
	}
}
